package tcptestdemo1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

/**
 * Created by L.jp
 * Description:
 * User: 86189
 * Date: 2022-08-09
 * Time: 16:32
 */
/*
TCP程序练习
客户端：发送数据，接受服务器反馈
服务器：收到消息后给出反馈

分析
客户端创建对象，使用输出流输出数据
服务端创建对象，使用输入流接受数据
服务端使用输出流给出反馈数据
客户端使用输入流接受反馈数据
*/
    //客户端发送一个hello,收到服务器发的一个你谁啊
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 1000);
        
        //发送数据给服务器
        OutputStream os= socket.getOutputStream();
        os.write("hello".getBytes());
        // os.close();如果在这里关流,会导致整个socket都无法使用
        //如果不关闭输出流，因为后面还要处理输入流，那么不关闭输出流就会导致阻塞，所以要关闭输出流
        socket.shutdownOutput();//仅仅关闭输出流.并写一个结束标记,对socket没有任何影响
        
          /*InputStream is = socket.getInputStream();
        int b;
        while((b = is.read()) !=-1){
            System.out.println((char) b);
        }*/
        //接收服务器的数据
        //由于服务器有可能发送的是中文，但是InputStream是字节流，我们要使用字符流接收
        //需要使用一个中间对象把字节流转换为字符流
        
        //从字符输入流中读取文本，缓冲字符，以便高效读取字符、数组和行。
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader
                (socket.getInputStream()));
        
        String line;
        while ((line= bufferedReader.readLine())!=null){
            System.out.println(line);
        }
        bufferedReader.close();
        os.close();
        socket.close();
        
    }
}
